Modern computers are controlled by an operating system that executes computer programs as processes. Processes include a memory space as well as a set of instructions that can be executed by the processor of a computer. In order to enforce security and ensure that processes do not interfere with one another, hardware protection mechanisms such as privilege levels and virtual memory have been employed to isolate processes from one another.
Unfortunately, hardware protection mechanisms can be very costly in terms of execution time, reducing the performance of the processes. Therefore, it would be beneficial to have a way to maintain isolation of processes but also reduce the performance burden imposed by hardware protection mechanisms.